// jQuery Mask Plugin v1.7.4 // github.com/igorescobar/jQuery-Mask-Plugin (function(g) { "function" === typeof define && define.amd ? define(["jquery"], g) : g(window.jQuery || window.Zepto) })(function(g) { var z = function(a, e, b) { var k = this, n, p; a = g(a); e = "function" === typeof e ? e(a.val(), void 0, a, b) : e; var c = { getCaret: function() { try { var d, f = 0, c = a.get(0), h = document.selection, e = c.selectionStart; if (h && !~navigator.appVersion.indexOf("MSIE 10")) d = h.createRange(), d.moveStart("character", a.is("input") ? -a.val().length : -a.text().length), f = d.text.length; else if (e || "0" === e) f = e; return f } catch (b) {} }, setCaret: function(d) { try { if (a.is(":focus")) { var f, c = a.get(0); c.setSelectionRange ? c.setSelectionRange(d, d) : c.createTextRange && (f = c.createTextRange(), f.collapse(!0), f.moveEnd("character", d), f.moveStart("character", d), f.select()) } } catch (h) {} }, events: function() { a.on("keydown.mask", function() { n = c.val() }).on("keyup.mask", c.behaviour).on("paste.mask drop.mask", function() { setTimeout(function() { a.keydown().keyup() }, 100) }).on("change.mask", function() { a.data("changed", !0) }).on("blur.mask", function() { n === a.val() || a.data("changed") || a.trigger("change"); a.data("changed", !1) }).on("focusout.mask", function() { b.clearIfNotMatch && !p.test(c.val()) && c.val("") }) }, getRegexMask: function() { for (var d = [], f, a, c, b, l = 0; l < e.length; l++)(f = k.translation[e[l]]) ? (a = f.pattern.toString().replace(/.{1}$|^.{1}/g, ""), c = f.optional, (f = f.recursive) ? (d.push(e[l]), b = { digit: e[l], pattern: a }) : d.push(c || f ? a + "?" : a)) : d.push("\\" + e[l]); d = d.join(""); b && (d = d.replace(RegExp("(" + b.digit + "(.*" + b.digit + ")?)"), "($1)?").replace(RegExp(b.digit, "g"), b.pattern)); return RegExp(d) }, destroyEvents: function() { a.off("keydown keyup paste drop change blur focusout DOMNodeInserted ".split(" ").join(".mask ")).removeData("changeCalled") }, val: function(d) { var c = a.is("input"); return 0 < arguments.length ? c ? a.val(d) : a.text(d) : c ? a.val() : a.text() }, getMCharsBeforeCount: function(d, a) { for (var c = 0, b = 0, g = e.length; b < g && b < d; b++) k.translation[e.charAt(b)] || (d = a ? d + 1 : d, c++); return c }, caretPos: function(d, a, b, h) { return k.translation[e.charAt(Math.min(d - 1, e.length - 1))] ? Math.min(d + b - a - h, b) : c.caretPos(d + 1, a, b, h) }, behaviour: function(d) { d = d || window.event; var a = d.keyCode || d.which; if (-1 === g.inArray(a, k.byPassKeys)) { var b = c.getCaret(), e = c.val(), u = e.length, l = b < u, q = c.getMasked(), m = q.length, n = c.getMCharsBeforeCount(m - 1) - c.getMCharsBeforeCount(u - 1); q !== e && c.val(q); !l || 65 === a && d.ctrlKey || (8 !== a && 46 !== a && (b = c.caretPos(b, u, m, n)), c.setCaret(b)); return c.callbacks(d) } }, getMasked: function(a) { var f = [], g = c.val(), h = 0, n = e.length, l = 0, q = g.length, m = 1, p = "push", s = -1, r, v; b.reverse ? (p = "unshift", m = -1, r = 0, h = n - 1, l = q - 1, v = function() { return -1 < h && -1 < l }) : (r = n - 1, v = function() { return h < n && l < q }); for (; v();) { var w = e.charAt(h), x = g.charAt(l), t = k.translation[w]; if (t) x.match(t.pattern) ? (f[p](x), t.recursive && (-1 === s ? s = h : h === r && (h = s - m), r === s && (h -= m)), h += m) : t.optional && (h += m, l -= m), l += m; else { if (!a) f[p](w); x === w && (l += m); h += m } } a = e.charAt(r); n !== q + 1 || k.translation[a] || f.push(a); return f.join("") }, callbacks: function(d) { var f = c.val(), g = f !== n; if (!0 === g && "function" === typeof b.onChange) b.onChange(f, d, a, b); if (!0 === g && "function" === typeof b.onKeyPress) b.onKeyPress(f, d, a, b); if ("function" === typeof b.onComplete && f.length === e.length) b.onComplete(f, d, a, b) } }; k.remove = function() { var a; c.destroyEvents(); c.val(k.getCleanVal()).removeAttr("maxlength"); a = c.getCaret(); c.setCaret(a - c.getMCharsBeforeCount(a)) }; k.getCleanVal = function() { return c.getMasked(!0) }; k.init = function() { b = b || {}; k.byPassKeys = [9, 16, 17, 18, 36, 37, 38, 39, 40, 91]; k.translation = { 0: { pattern: /\d/ }, 9: { pattern: /\d/, optional: !0 }, "#": { pattern: /\d/, recursive: !0 }, A: { pattern: /[a-zA-Z0-9]/ }, S: { pattern: /[a-zA-Z]/ } }; k.translation = g.extend({}, k.translation, b.translation); k = g.extend(!0, {}, k, b); p = c.getRegexMask(); !1 !== b.maxlength && a.attr("maxlength", e.length); b.placeholder && a.attr("placeholder", b.placeholder); a.attr("autocomplete", "off"); c.destroyEvents(); c.events(); var d = c.getCaret(); c.val(c.getMasked()); c.setCaret(d + c.getMCharsBeforeCount(d, !0)) }() }, p = {}, y = function() { var a = g(this), e = {}; a.attr("data-mask-reverse") && (e.reverse = !0); "false" === a.attr("data-mask-maxlength") && (e.maxlength = !1); a.attr("data-mask-clearifnotmatch") && (e.clearIfNotMatch = !0); a.mask(a.attr("data-mask"), e) }; g.fn.mask = function(a, e) { var b = this.selector, k = function(b) { if (!b.originalEvent || g(b.originalEvent.relatedNode)[0] != g(this)[0]) return g(this).data("mask", new z(this, a, e)) }; this.each(k); b && !p[b] && (p[b] = !0, setTimeout(function() { g(document).on("DOMNodeInserted.mask", b, k) }, 500)) }; g.fn.unmask = function() { try { return this.each(function() { g(this).data("mask").remove() }) } catch (a) {} }; g.fn.cleanVal = function() { return this.data("mask").getCleanVal() }; g("*[data-mask]").each(y); g(document).on("DOMNodeInserted.mask", "*[data-mask]", y) });